﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Follow.Model;

namespace Follow.Relatorios
{
    public partial class RelatorioPropostas : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {

                if (Session["idUsuario"] == null)
                {
                    Response.Redirect("../Default.aspx");
                }
                else
                {
                    Common.ValidaPermissoes valida = new Common.ValidaPermissoes();
                    bool possuiPermissao = valida.validaPermissaoPorTela("Relatório de Propostas", Convert.ToInt32(Session["idGrupoUsuario"]));

                    if (possuiPermissao == false)
                    {
                        Response.Redirect("../permissaoNegada.aspx");
                    }
                    else
                    {

                        ddlMes.SelectedValue = DateTime.Now.Month.ToString();
                        ddlAno.SelectedValue = DateTime.Now.Year.ToString();

                        PopulaGrafico();

                    }
                }
            }
        }
        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            PopulaGrafico();
        }

        private void PopulaGrafico()
        {
            Business.RelatorioPropostaBO bo = new Business.RelatorioPropostaBO();

            IList<Model.RelatorioProposta> lst = new List<Model.RelatorioProposta>();

            Model.Funcionario funcionario = new Model.Funcionario();
            Business.FuncionarioBO boFuncionario = new Business.FuncionarioBO();
            
            funcionario = boFuncionario.findByIdUsuario(Convert.ToInt32(Session["idUsuario"]));

            lst = bo.findAll(funcionario.IDFuncionario, funcionario.TipoFunc, ddlMes.SelectedValue, ddlAno.SelectedValue);

            if (lst.Count > 0)
            {
                HttpContext context = HttpContext.Current;
                Page page = (Page)context.Handler;
                Literal litScript = new Literal();
                System.Text.StringBuilder GoogleGraficos = new System.Text.StringBuilder();

                GoogleGraficos.Append("<script type=\"text/javascript\" src=\"https://www.google.com/jsapi\"></script>");
                GoogleGraficos.Append("<script type=\"text/javascript\">");
                GoogleGraficos.Append("google.load(\"visualization\", \"1\", {packages:[\"corechart\"]});");
                GoogleGraficos.Append("google.setOnLoadCallback(drawChart);");
                GoogleGraficos.Append("function drawChart() {");
                GoogleGraficos.Append(" var data = google.visualization.arrayToDataTable([");
                GoogleGraficos.Append("['Funcionario', 'Nova', 'Aguardando Aprovação', 'Retornado para alteração', 'Aprovada', 'Reprovada', 'Concluída'],");

                int qtdeNova = 0;
                int qtdeAguardandoAprovacao = 0;
                int qtdeRetornadoAlteracao = 0;
                int qtdeAprovada = 0;
                int qtdeReprovada = 0;
                int qtdeConcluida = 0;

                string nomeFuncionario = "";

                String Parametros = "";
                foreach (Model.RelatorioProposta item in lst)
                {
                    if ((item.NomeFuncionario != nomeFuncionario) && (!string.IsNullOrEmpty(nomeFuncionario)))
                    {
                        Parametros += "['" + nomeFuncionario
                                       + "', " + qtdeNova.ToString()
                                       + ", " + qtdeAguardandoAprovacao.ToString()
                                       + ", " + qtdeRetornadoAlteracao.ToString()
                                       + ", " + qtdeAprovada.ToString()
                                       + ", " + qtdeReprovada.ToString()
                                       + ", " + qtdeConcluida.ToString() + "],";

                        qtdeNova = 0;
                        qtdeAguardandoAprovacao = 0;
                        qtdeRetornadoAlteracao = 0;
                        qtdeAprovada = 0;
                        qtdeReprovada = 0;
                        qtdeConcluida = 0;

                        nomeFuncionario = "";
                    }

                    if (string.IsNullOrEmpty(nomeFuncionario))
                        nomeFuncionario = item.NomeFuncionario;


                    if (item.NomeFuncionario == nomeFuncionario)
                    {
                        switch (item.statusDescricao)
                        {
                            case "Nova":
                                qtdeNova = item.QuantidadeProposta;
                                break;
                            case "Aguardando Aprovação":
                                qtdeAguardandoAprovacao = item.QuantidadeProposta;
                                break;
                            case "Retornado para alteração":
                                qtdeRetornadoAlteracao = item.QuantidadeProposta;
                                break;
                            case "Aprovada":
                                qtdeAprovada = item.QuantidadeProposta;
                                break;
                            case "Reprovada":
                                qtdeReprovada = item.QuantidadeProposta;
                                break;
                            case "Concluída":
                                qtdeConcluida = item.QuantidadeProposta;
                                break;
                        }

                        if (lst.Count == 1)
                        {
                            Parametros += "['" + nomeFuncionario
                                           + "', " + qtdeNova.ToString()
                                           + ", " + qtdeAguardandoAprovacao.ToString()
                                           + ", " + qtdeRetornadoAlteracao.ToString()
                                           + ", " + qtdeAprovada.ToString()
                                           + ", " + qtdeReprovada.ToString()
                                           + ", " + qtdeConcluida.ToString() + "],";

                            qtdeNova = 0;
                            qtdeAguardandoAprovacao = 0;
                            qtdeRetornadoAlteracao = 0;
                            qtdeAprovada = 0;
                            qtdeReprovada = 0;
                            qtdeConcluida = 0;

                            nomeFuncionario = "";
                        }

                    }

                    if (item == lst.Last())
                    {
                        Parametros += "['" + nomeFuncionario
                                           + "', " + qtdeNova.ToString()
                                           + ", " + qtdeAguardandoAprovacao.ToString()
                                           + ", " + qtdeRetornadoAlteracao.ToString()
                                           + ", " + qtdeAprovada.ToString()
                                           + ", " + qtdeReprovada.ToString()
                                           + ", " + qtdeConcluida.ToString() + "],";
                    }

                }

                Parametros = Parametros.Substring(0, Parametros.LastIndexOf(","));

                GoogleGraficos.Append(Parametros);
                GoogleGraficos.Append("]);");

                GoogleGraficos.Append(" var options = {");
                GoogleGraficos.Append("title: 'Status por Funcionários',");
                GoogleGraficos.Append("hAxis: {title: 'Funcionários', titleTextStyle: {color: 'black'}},");
                GoogleGraficos.Append("legend:{position: 'right', textStyle: {color: 'black', fontSize: 13}},");
                GoogleGraficos.Append("colors:['#C4C4C4','#FED54A','#E93420','#05EA79','#696969','#82D8FE']");
                GoogleGraficos.Append("};");


                GoogleGraficos.Append("var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));");
                GoogleGraficos.Append(" chart.draw(data, options);}</script>");

                litScript.Text = GoogleGraficos.ToString();
                page.Header.Controls.Add(litScript);

            }
        }
    }
}